package com.example.demo.utils;

/**
 * 未使用,距离在mysql里计算
 * 算经纬度距离工具
 *
 * @author xueyj
 * @date 13:40
 */
public class DistanceUtil {

    private static double EARTH_RADIUS = 6378.137;

    private static double rad(double d) {
        return d * Math.PI / 180.0;
    }

    /**
     * 通过经纬度获取距离(单位：米)
     *
     * @param lat1
     * @param lng1
     * @param lat2
     * @param lng2
     * @return
     */
    public static double getDistance(double lat1, double lng1, double lat2,
                                     double lng2) {
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
                + Math.cos(radLat1) * Math.cos(radLat2)
                * Math.pow(Math.sin(b / 2), 2)));
        s = s * EARTH_RADIUS;
        s = Math.round(s * 10000d) / 10000d;
        s = s * 1000;
        return s;
    }

    private static double distance(double lat1, double lon1, double lat2, double lon2, String unit) {
        if ((lat1 == lat2) && (lon1 == lon2)) {
            return 0;
        } else {
            double theta = lon1 - lon2;
            double dist = Math.sin(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lat2)) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(theta));
            dist = Math.acos(dist);
            dist = Math.toDegrees(dist);
            dist = dist * 60 * 1.1515;
            if (unit.equals("K")) {
                dist = dist * 1.609344;
            } else if (unit.equals("N")) {
                dist = dist * 0.8684;
            }
            return (dist);
        }
    }


    public static void main(String[] args) {
     /*121.48789949,31.24916171
        121.58789949,32.24916171*/
        String lat = "121.48789949,31.24916171";
        String lng = "121.3577313271,31.295481392277";
        String[] split = lat.split(",");
        String[] split2 = lng.split(",");
        double distance = distance(Double.parseDouble(split[0])
                , Double.parseDouble(split[1])
                , Double.parseDouble(split2[0])
                , Double.parseDouble(split2[1]),"K");
        System.out.println(distance);
        double distance2 = getDistance(Double.parseDouble(split[0])
                , Double.parseDouble(split[1])
                , Double.parseDouble(split2[0])
                , Double.parseDouble(split2[1]));
        System.out.println(distance2);
    }
}
